/**
 * 容器注册，容器获取等全局性操作函数库，需要根据W3C规范使用基本标准的方式实现，最好不要使用外部依赖较重的组件或框架实现
 */
import $ from 'jquery'


const container = {

  /**
   * 注册容器信息到指定的根目录进行挂载
   * 扫描查找对应容器中申明的容器名称，路径，类型，父级，容器布局（基于顶层dom还是当前页面dom进行渲染），容器未提交事件，未提交数据等信息
   * 容器必须申明对应的名称，路径，父级，类型等信息
   * 容器注册成功后需要将返回的实例ID，赋值到容器ID属性中，方便后面快速查询
   * 最总容器注册成功后，生成的数据是根据path路径，生成树形结构的数据内容
   *
   *
   * container
   */
  registerContainer() {
    const instanceId = 12;
    //组装后的数据格式参考如下：
    let container = {
      id: 123,
      name: "container",
	  path: "root.flow.flowDesign",
	  baseInfo: {
		id: 1234,
        name: 'baseInfo',
        path: 'root.flow.flowDesign.baseInfo',
        type: 'menu', //menu、button、catalogue
        unSubmitEvent: 'funcName', //该事件应该必须有对应的事件实现
        unSubmitData: {} //当注册时
	  },
	  configInfo: {
		id: 1235,
        name: 'baseInfo',
        path: 'root.flow.flowDesign.configInfo',
        type: 'menu', //menu、button、catalogue
        unSubmitEvent: 'funcName', //该事件应该必须有对应的事件实现
        unSubmitData: {}, //当注册时,
		configBaseInfo: {
			id: 1235,
			name: 'baseInfo',
			path: 'root.flow.flowDesign.configInfo.configBaseInfo',
			type: 'menu', //menu、button、catalogue
			unSubmitEvent: 'funcName', //该事件应该必须有对应的事件实现
			unSubmitData: {} //当注册时,
		}
	  }
    }
    return instanceId;
  },

  /**
   *
   * @param path 根据path路径找到当前节点，以及子节点中的未提交事件并执行提交操作
   */
  excuteUnSubmitEvent(path){

  },


  /**
   *
   * @param path 根据path路径注册当前未提交的数据
   */
  registerUnSubmitData(path, unSubmitData){

  },

  /**
   *
   * @param path 根据path路径获取当前未提交的数据
   */
  fetchUnSubmitData(path){
	  return null;
  },

  /**
   *
   * @param instanceId 根据指定实例ID查询对应的注册信息
   */
  fetchContainerByInstance(instanceId) {


  },

  /**
   *
   * @param path 根据path路径查询容器对应的注册信息
   */
  fetchContainerByPath(path) {

  },

  /**
   * 容器节点i18N国际化语言切换
   * @param path
   */
  i18N(path,defaultName){
	  return defaultName;
  },

  /**
   * 容器排版拖拽，放大，缩小等操作的具体实现
   * 具体实现由domit完成
   * @param dragType 拖拽类型 平铺拖拽：drag，前置拖拽：preDrag
   */
  dragContainer(dragType) {
    

  },
  //水平线拖拽 a,b,c,d 对应相对的class Y为多余的距离
  hdrag(a,b,c,d,y){
    var vctn = document.getElementById(a);
    var topd = document.getElementById(b);
    var hbar = document.getElementById(c);
    var TopCard=document.getElementById(d);

    const hdrag = (e) => {
      topd.style.height = (e.pageY - hbar.offsetHeight / 2 - vctn.offsetTop-y) + 'px';
      TopCard.style.height=topd.style.height
    }
    hbar.addEventListener('mousedown', () => {
      document.addEventListener('mousemove', hdrag);
    });
    document.addEventListener('mouseup', () => {
      document.removeEventListener('mousemove', hdrag);
    });
  },
  //垂直线拖拽 a,b,c,d 对应相对的class Y为多余的距离
  vdrag(a,b,c,y){
    var hctn = document.getElementById(a);
    var leftd = document.getElementById(b);
    var vbar = document.getElementById(c);
    const vdrag = (e) => {
      leftd.style.width = (e.pageX - vbar.offsetWidth / 2 - hctn.offsetLeft- y) + 'px';
    }
    vbar.addEventListener('mousedown', () => {
      document.addEventListener('mousemove', vdrag);
    });
    document.addEventListener('mouseup', () => {
      document.removeEventListener('mousemove', vdrag);
    });
  },
}

export default container;
